﻿using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
using System.Threading;

using DevExpress.XtraEditors;
using DevExpress.XtraReports.UI;
using prjKQXS_DLL;
using prjKQXS_DLL.Truyen_thong;
using prjKQXS_Report.Truyen_thong;

namespace prjKQXS_UI.Truyen_thong
{
    public partial class frmBaoCaoThanhToan : DevExpress.XtraEditors.XtraForm
    {
        clsHuyVe cls = new clsHuyVe();
        public int GiaVe = 0;

        /// <summary>
        /// Giá trị biến này tự động được gán là '%' khi chọn tất cả hoặc là mã đơn vị tương ứng khi chọn cán bộ từ lueDonVi
        /// </summary>
        char MaDV = '%';

        /// <summary>
        /// TenDV (Tên đơn vị) tự động được gán khi chọn đơn vị từ lueDonVi
        /// </summary>
        string TenDV;


        /// <summary>
        /// Giá trị biến này tự động được gán khi chọn cán bộ từ lueCanBo (-1 hoặc id của cán bộ tương ứng).
        /// </summary>
        int DMCanBoID = -1;

        /// <summary>
        /// Giá trị biến này tự động được gán khi chọn cán bộ từ gvCanBo
        /// </summary>
        string MaCB = "";

        /// <summary>
        /// TenCB (Tên cán bộ) tự động được gán khi chọn cán bộ từ lueCanBo
        /// </summary>
        string TenCB;
        
        #region Form =================================================================
        public frmBaoCaoThanhToan()
        {
            InitializeComponent();

            cls.OnAction += new clsHuyVe.OnActionHandler(cls_OnAction);
            cls.OnError += new clsHuyVe.OnErrorHandler(cls_OnError);

            ucDonVi.lueDonVi.EditValueChanged += new EventHandler(lueDonVi_EditValueChanged);
            ucCanBo.lueCanBo.EditValueChanged += new EventHandler(lueCanBo_EditValueChanged);

            ucDonVi.lueDonVi.KeyDown += new KeyEventHandler(lueDonVi_KeyDown);
        }
        #endregion Form ==============================================================


        #region Control =================================================================
        private void frmTonghoptt_Load(object sender, EventArgs e)
        {
            deTuNgay.Focus();
            marqueeProgressBarControl1.Properties.Stopped = true;
            Control.CheckForIllegalCrossThreadCalls = false;
            loadLueDonVi();
        }

        private void lueDonVi_EditValueChanged(object sender, EventArgs e)
        {
            string madv = ucDonVi.lueDonVi.GetColumnValue("Ma_DT").ToString().Trim();
            MaDV = madv == "TC" ? '%' : Convert.ToChar(madv);
            TenDV = ucDonVi.lueDonVi.GetColumnValue("Ten_DT").ToString().Trim();

            loadLueCanBo();
            if (ucDonVi.lueDonVi.ItemIndex != 0)
                ucCanBo.lueCanBo.Properties.ReadOnly = false;
            else ucCanBo.lueCanBo.Properties.ReadOnly = true;
        }

        private void deTuNgay_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode.ToString() == "Right" || e.KeyCode == Keys.Enter)
                deDenNgay.Focus();
        }

        private void deDenNgay_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode.ToString() == "Down" || e.KeyCode == Keys.Enter)
                ucDonVi.lueDonVi.Focus();
            else if (e.KeyCode.ToString() == "Up") deTuNgay.Focus();
        }

        private void lueCanBo_EditValueChanged(object sender, EventArgs e)
        {
            DMCanBoID = Convert.ToInt32(ucCanBo.lueCanBo.GetColumnValue("ID"));
            MaCB = ucCanBo.lueCanBo.GetColumnValue("Ma_DT").ToString().Trim();
            TenCB = ucCanBo.lueCanBo.GetColumnValue("Ten_DT").ToString().Trim();
        }

        private void lueCanBo_KeyDown_1(object sender, KeyEventArgs e)
        {
            if (e.KeyCode.ToString() == "Down" || e.KeyCode == Keys.Enter)
                sbtnTongHop.Focus();
            else if (e.KeyCode.ToString() == "Up") ucDonVi.lueDonVi.Focus();
        }

        private void lueDonVi_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode.ToString() == "Down" || e.KeyCode == Keys.Enter)
                ucCanBo.lueCanBo.Focus();
            else if (e.KeyCode.ToString() == "Up") deDenNgay.Focus();
        }

        private void sbtnTongHop_Click(object sender, EventArgs e)
        {
            In(false);
        }

        private void sbtnTheoNgay_Click(object sender, EventArgs e)
        {
            In(true);
        }

        private void sbtnBoqua_Click_1(object sender, EventArgs e)
        {
            this.Close();
        }
        #endregion Control ==============================================================


        #region Sub and Func =========================================================
        #region cls event --------------------------------------------
        private void cls_OnAction(SqlException e)
        {
            cls_OnError(e);
        }

        private void cls_OnError(Exception e)
        {
            XtraMessageBox.Show("Một lỗi chưa được xử lý đã xảy ra. Chi tiết lỗi: \n" + e.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
            this.Close();
        }
        #endregion cls event -----------------------------------------
        
        private void loadLueDonVi()
        {
            ucDonVi.lueDonVi.Properties.DataSource = clsCommon.load_lueDonVi();
            ucDonVi.lueDonVi.ItemIndex = 0;
        }

        private void loadLueCanBo()
        {
            ucCanBo.lueCanBo.Properties.DataSource = clsCommon.load_lueCanBo(MaDV);
            ucCanBo.lueCanBo.ItemIndex = 0;
        }


        /// <summary>
        /// 
        /// </summary>
        /// <param name="TheoNgay">Truyền vào là true nếu in theo ngày</param>
        private void In(bool TheoNgay)
        {
            DateTime TuNgay = deTuNgay.DateTime;
            DateTime DenNgay = deDenNgay.DateTime;

            if (TuNgay == DateTime.Parse("01/01/1900")
                || DenNgay == DateTime.Parse("01/01/1900")
                || TuNgay.Month > DenNgay.Month
                || TuNgay.Year != DenNgay.Year
                || TuNgay > DenNgay)
                //|| DenNgay >= DateTime.Today)
            {
                clsCommon.MsgBox("Bạn đã nhập sai ngày", 0);
            }
            else
            {
                marqueeProgressBarControl1.Properties.Stopped = false;
                Thread t;
                if (!TheoNgay) t = new Thread(new ThreadStart(In_TongHop));
                else t = new Thread(new ThreadStart(In_TheoNgay));
                t.SetApartmentState(ApartmentState.STA);
                t.Start();
            }
        }

        private void In_TongHop()
        {
            DateTime TuNgay = deTuNgay.DateTime;
            DateTime DenNgay = deDenNgay.DateTime;

            if (MaDV != '%')
            {
                if (DMCanBoID == -1)
                {
                    rptTongHopTT_CB rpt = new rptTongHopTT_CB();

                    rpt.dtSource = cls.rptTongHopTT(MaDV, TuNgay, DenNgay, ref rpt.TyLe, "_DL");
                    if (rpt.dtSource.Rows.Count == 0)
                        rpt.dtSource = cls.rptTongHopTT(MaDV, TuNgay, DenNgay, ref rpt.TyLe, "_CB");

                    rpt.Parameters["pTenDV"].Value = TenDV;
                    rpt.Parameters["pTuNgay"].Value = TuNgay;
                    rpt.Parameters["pDenNgay"].Value = DenNgay;
                    rpt.ShowRibbonPreviewDialog();
                }
                else
                {
                    rptThongKeTT_CB rpt = new rptThongKeTT_CB();
                    rpt.dtSource = cls.rptTongHopCTTT_DL(MaCB, TuNgay, DenNgay, ref rpt.TyLe);
                    //if (rpt.dtSource.Rows.Count == 0)
                    //    rpt.dtSource = cls.rptTongHopCTTT(MaCB, TuNgay, DenNgay, ref rpt.TyLe, "_CB");
                    rpt.pTuNgay.Value = TuNgay;
                    rpt.pDenNgay.Value = DenNgay;
                    rpt.pTenDV.Value = TenDV;
                    rpt.pMaCB.Value = MaCB;
                    rpt.pTenCB.Value = TenCB;
                    rpt.ShowRibbonPreviewDialog();
                }
            }
            else if (DMCanBoID == -1)
            {
                rptThongKeTT_DV rpt = new rptThongKeTT_DV();
                rpt.dtSource = cls.rptTongHop_CB('%', TuNgay, DenNgay, ref rpt.TyLe, ref rpt.VietBangSo);
                rpt.pTuNgay.Value = TuNgay;
                rpt.pDenNgay.Value = DenNgay;
                rpt.ShowRibbonPreviewDialog();
            }

            marqueeProgressBarControl1.Properties.Stopped = true;
        }

        private void In_TheoNgay()
        {
            DateTime TuNgay = deTuNgay.DateTime;
            DateTime DenNgay = deDenNgay.DateTime;

            if (MaDV != '%')
            {
                if (DMCanBoID == -1)
                {
                    rptThongKeTT_DV_Ngay rpt = new rptThongKeTT_DV_Ngay();

                    rpt.dtSource = cls.rptThongKeTT_DV_Ngay(MaDV, TuNgay, DenNgay, ref rpt.TyLe);


                    rpt.pTuNgay.Value = TuNgay;
                    rpt.pDenNgay.Value = DenNgay;
                    rpt.xrlblTenDV.Text = "Phòng XSKT: " + TenDV;
                    rpt.ShowRibbonPreviewDialog();
                }
                else
                {
                    rptThongKeTT_CB_Ngay rpt = new rptThongKeTT_CB_Ngay();
                    string TyLe = "";

                    rpt.dtSource = cls.rptThongKeTT_CB_Ngay(MaCB, TuNgay, DenNgay, ref TyLe);

                    rpt.xrlblNgay.Text = "Từ ngày " + TuNgay.ToString("dd/MM/yyyy") + " đến ngày " + DenNgay.ToString("dd/MM/yyyy");
                    rpt.lblHT.Text = TyLe;
                    rpt.xrlblTenDV.Text = "Phòng XSKT: " + TenDV;
                    rpt.xrtcMaCB.Text = MaCB;
                    rpt.xrtcTenCB.Text = TenCB;
                    rpt.ShowRibbonPreviewDialog();
                }
            }
            else if (DMCanBoID == -1)
            {
                rptThongKeTT_CT rpt = new rptThongKeTT_CT();
                string TyLe = "";
                rpt.dtSource = cls.rptThongKeTT_CT(TuNgay, DenNgay, ref TyLe);
                rpt.lblHT.Text = TyLe;
                rpt.xrlblNgay.Text = "Từ ngày " + TuNgay.ToString("dd/MM/yyyy") + " đến ngày " + DenNgay.ToString("dd/MM/yyyy");
                rpt.ShowRibbonPreviewDialog();
            }

            marqueeProgressBarControl1.Properties.Stopped = true;
        }
        #endregion Sub and Func =========================================================

        private void ucDonVi_Load(object sender, EventArgs e)
        {

        }
    }
}